package com.csu.petstore.service.Impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.csu.petstore.mapper.CartItemMapper;
import com.csu.petstore.mapper.ItemMapper;
import com.csu.petstore.mapper.ProductMapper;
import com.csu.petstore.pojo.Cart;
import com.csu.petstore.pojo.CartItem;
import com.csu.petstore.pojo.Item;
import com.csu.petstore.service.CartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class CartServiceImpl implements CartService {
    @Autowired
    private CartItemMapper cartItemMapper;
    @Autowired
    private ItemMapper itemMapper;
    @Override
    public Cart getCart(String userId){
        Cart cart = new Cart();
        cart.setUserId(userId);
        Map<String, Object> cartMap = new HashMap<>();
        cartMap.put("userid", userId);
        cartItemMapper.selectByMap(cartMap);
        cart.setItemList(cartItemMapper.selectByMap(cartMap));
        cart.getSubTotal();
        return cart;
    }

    public Cart removeItemFromCart(Cart cart , String itemId , String userId){

        Map<String, Object> cartMap = new HashMap<>();
        cartMap.put("userid", userId);
        cartMap.put("itemid", itemId);
        cartItemMapper.deleteByMap(cartMap);
        cartMap.remove("itemid");
        cart.setItemList(cartItemMapper.selectByMap(cartMap));
        return cart;
    }
    public Cart addItemToCart(String itemId , String userId){
        Item item = itemMapper.selectById(itemId);
        Map<String, Object> cartMap = new HashMap<>();
        cartMap.put("userid", userId);
        cartMap.put("itemid", itemId);
        if (cartItemMapper.selectByMap(cartMap).size() == 0){
            CartItem cartItem = new CartItem();
            cartItem.setItem(item);
            cartItem.setUserId(userId);
            cartItem.setAttr(item.getAttribute1());
            cartItem.setInStock(true);
            cartItem.setItemId(itemId);
            cartItem.setProductId(item.getProductId());
            cartItem.setListPrice(item.getListPrice());
            cartItem.setQuantity(1);
            cartItem.setLineNumber(0);
            cartItem.setUnitPrice(item.getUnitCost());
            cartItem.setTotal(cartItem.getListPrice().multiply(BigDecimal.valueOf(cartItem.getQuantity())));

            cartItemMapper.insert(cartItem);

        }else {
            List<CartItem> cartItems = cartItemMapper.selectByMap(cartMap);
            UpdateWrapper<CartItem> updateWrapper = new UpdateWrapper<>();
            updateWrapper.eq("itemid",itemId).eq("userid",userId);
            updateWrapper.set("quantity", (cartItems.get(0).getQuantity()+1));
            cartItemMapper.update(updateWrapper);
        }

        return getCart(userId);
    }
    public void updateQuantity(String itemId , int quantity , String userId){
        UpdateWrapper<CartItem> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("itemid",itemId).eq("userid",userId);
        updateWrapper.set("quantity", quantity);

        // Update the quantity using the updateWrapper
        cartItemMapper.update(updateWrapper);
    }
}
